package com.sleep.drug_traceability.service;

import com.sleep.drug_traceability.vo.Result;
import com.sleep.drug_traceability.vo.params.OneParam;
import com.sleep.drug_traceability.vo.params.SearchManParam;
import com.sleep.drug_traceability.vo.params.SearchSelParam;
import com.sleep.drug_traceability.vo.params.TwoParam;

/**
 * @author Sleep-6000
 * @date 2022/4/28
 */
public interface SearchService {

    /**
     * 药品生产商的药品溯源页面，获取药品生产数据
     *
     * @param searchManParam 溯源限制条件
     * @return 药品生产数据
     */
    Result searchManDrug(SearchManParam searchManParam);

    /**
     * 药品生产商的药品溯源页面，获取药品运输数据
     *
     * @param searchTraParam 溯源限制条件
     * @return 药品运输数据
     */
    Result searchTraDrug(SearchManParam searchTraParam);

    /**
     * 销售商的药品溯源页面，获取药品购买数据
     *
     * @param searchSelParam 溯源限制条件
     * @param token          token
     * @return 药品购买数据
     */
    Result searchSelDrug(SearchSelParam searchSelParam, String token);

    /**
     * 销售商的药品溯源页面，获取消费者数据
     *
     * @param searchConParam 溯源限制条件
     * @param token          token
     * @return 消费者数据
     */
    Result searchConDrug(SearchSelParam searchConParam, String token);

    /**
     * 监管部门的药品溯源页面，获取药品生产数据
     *
     * @param param 药品溯源编码
     * @return 药品生产数据
     */
    Result getManTable(OneParam param);

    /**
     * 监管部门的药品溯源页面，获取药品运输数据
     *
     * @param param 药品溯源编码
     * @return 药品运输数据
     */
    Result getTraTable(OneParam param);

    /**
     * 监管部门的药品溯源页面，获取销售商的药品购买数据
     *
     * @param param 药品溯源编码
     * @return 销售商的药品购买数据
     */
    Result getSelTable(OneParam param);

    /**
     * 监管部门的药品溯源页面，获取消费者数据
     *
     * @param param 药品溯源编码
     * @return 消费者数据
     */
    Result getConTable(OneParam param);

    /**
     * 根据溯源码溯源
     *
     * @param param 溯源码
     * @return 所有数据
     * @throws Exception
     */
    Result trace(OneParam param) throws Exception;

    /**
     * 获取药品溯源编码
     * @param twoParam twoParam
     * @return 药品溯源编码
     */
    Result searchCode(TwoParam twoParam);

}
